import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  strict: true,
  state: {
    cart: []
  },
  mutations: { // 更改 state 的方法
    /**
     * 加入购物车
     * 当购物车中存在已选购的某件商品时，加入购物车时仅叠加数量即可
     * @param state 状态
     * @param payload 载荷，外部提交mutation时所传递的数据
     */
    addToCart (state, payload) {
      // 判断购物车中是否已存在 payload 载荷中的商品
      const has = state.cart.some(item => item.id === payload.id)
      if (has) { // 存在 payload 中选购的商品，叠加选购数量
        state.cart = state.cart.map(item => {
          if (item.id === payload.id) {
            item.amount += payload.amount
          }
          return item
        })
      } else { // 不存在，将 payload 中的商品对象添加到 cart 数组末尾
        state.cart = [
          ...state.cart,
          payload
        ]
      }
    }
  }
})

export default store
